/**
 * 装饰器模式
 * 1. 装饰器就是一个函数
 * 2. 装饰器需要使用@符号调用
 * 3. 装饰器调用的位置放在函数的头部紧挨着的地方
 * 4. 装饰器的参数就是一个constructor
 *
 * 需求就是：给这个类 添加一个方法，需要防止在原型上，不能在这个类的内部写
 */

function decorator(constructor: any) {
  constructor.prototype.getName = () => {
    return '2009A'
  }
}

@decorator
class Person {
  // prototype
  auto() {}
}
const d = new Person()
// 断言
console.log('d:', (d as any).getName())
